/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador.datos;

/**
 *
 * @author Iñaki Goffard, Javier S. Pardo
 */
public class CampoTS {

    private String id;

    private ExprTipos tipo;

    private int dir;

    //Nuevo atributo para indicar la clase del identificador:
    //      "var" - variable o parámetro por valor
    //      "tipo" - tipo construido
    //      "proc" - procedimiento
    //      "pvar" - parámetro por variable.
    private String clase;//También va dentro de los tipos y creo que no haría falta
    //El nivel identifica la profundidad del bloque en el que ha sido declarado el elemento.
    //En principio (y salvo que no sea posible hacerlo así) la inicialización de la variable nivel
    //la va a hacer la propia tabla de símbolos al incorporar el elemento (mediante su propiedad nivelTS
    //que guarda el nivel actual de la TS). Esto me permite no tener que cambiar el constructor CampoTS.
    private int nivel;

    public CampoTS (String id, ExprTipos tipo, int dir, String clase){

        this.id = id;

        this.tipo = tipo;

        this.dir = dir;

        this.clase = clase;

        //Pendiente de adjudicarle un nivel.
        //El nivel se le adjudica posteriormente al añadirlo a la TS.
        this.nivel = -1;


    }

    public String getId (){

        return this.id;
        
    }

    public int getDir(){
        return this.dir;
    }

    public String getTipo(){

        return this.tipo.getTipo();

    }

    public ExprTipos getTipoComp(){
        return this.tipo;
    }
    public void setTipo(String tipo){
      //  this.tipo = tipo;  ---> Esto ahora cambia
    }

    public String getClase(){
        return this.clase;
    }

    public String toString(){
        return "Id: " + this.getId() + ", \tTipo: " + this.getTipo() + "\tDir: " + this.getDir() +
                ", \tClase: " + this.getClase() + "\tNivel:  " + this.nivel + "\n";
    }

    /**
     * @return the nivel
     */
    public int getNivel() {
        return this.nivel;
    }

    /**
     * @param nivel the nivel to set
     */
    public void setNivel(int nivel) {
        this.nivel = nivel;
    }
}
